// 1. 算数运算符
{
  let a = 2;
  let b = 3;
  console.log(a + b); // 5
  console.log(a - b); // -1
  console.log(a * b); // 6
  console.log(a / b); // 0.6666666666666666
  console.log(a % b); // 2
  console.log(a++); // 2
  console.log(a--); // 3
  console.log(++a); // 3
  console.log(--a); // 2
  console.log(a ** b); // 8
}

console.log("-----------------------------");

// 2. 赋值运算符
{
  let a = 2;
  let b = 3;
  console.log((b += a)); // 5
  console.log((b -= a)); // 3
  console.log((b *= a)); // 6
  console.log((b /= a)); // 3
  console.log((b %= a)); // 1
  console.log((b **= a)); // 1
}

console.log("-----------------------------");

// 3. 比较运算符
{
  let a = 2;
  let b = 3;
  console.log(a == b); // false
  console.log(a === b); // false
  console.log(a != b); // true
  console.log(a !== b); // true
  console.log(a > b); // false
  console.log(a >= b); // flase
  console.log(a < b); // true
  console.log(a <= b); // true
  // console.log(a ? b);
}

console.log("-----------------------------");

// 4. 逻辑运算符
{
  let a = undefined;
  let b = 1;

  console.log(a && b); // undefined
  console.log(a || b); // 1
  console.log(!a && b); // 1
}

console.log("-----------------------------");

// 5. 类型运算符
{
  let number = 10;
  let string = "ss";
  let boolean = true;
  let bigInt = 1n;
  let symbol = Symbol("symbol");
  let und = undefined;
  let obj = null;
  let arr = [];
  let fn = () => {};

  console.log(typeof number); // number
  console.log(typeof string); // string
  console.log(typeof boolean); // boolean
  console.log(typeof bigInt); // bigint
  console.log(typeof symbol); // symbol
  console.log(typeof und); // undefined
  console.log(typeof obj); // object
  console.log(typeof arr); // object
  console.log(typeof fn); // function

  console.log(obj instanceof Object); // false
  console.log(arr instanceof Object); // true
  console.log(fn instanceof Object); // true

  console.log(Array.isArray(arr)); // true
}

console.log("-----------------------------");

// 6. 位运算符
{
  let a = 5; // 二进制: 0101
  let b = 3; // 二进制: 0011

  console.log(a & b); // 按位与：0001 (1)
  console.log(a | b); // 按位或：0111 (7)
  console.log(~a); // 按位非：~0101 = 11111010 (-6)
  console.log(a ^ b); // 按位异或：0110 (6)
  console.log(a << b); // 左移3位：0101 << 3 = 101000 (40)
  console.log(a >> b); // 右移3位：0101 >> 3 = 0000 (0)
  console.log(a >>> b); // 无符号右移3位：0101 >>> 3 = 000 (0)
}
